if ( (typeof ria) == 'undefined')
	ria = rialto;
if ((typeof ria.utils) == 'undefined')
	ria.utils = {};
	
ria.utils.event = {};

ria.utils.event.genericAddEvent = function(oHtml, e, handler) {
//=============================
	if (oHtml.attachEvent)
		oHtml.attachEvent("on" + e, handler);
	else
		oHtml.addEventListener(e, handler, false);
};

ria.utils.event.genericRemoveEvent = function(oHtml, e, handler) {
//=============================
	if (oHtml.detachEvent)
		oHtml.detachEvent("on" + e, handler);
	else
		oHtml.removeEventListener(e, handler, false);
};

function stopEvent(e)
//===================
{
if (!e) var e = window.event;
if (e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;


}

function stopDefault(e)
//====================
{
if (!e) var e = window.event;
/* pose un probleme lorque appliqu? largement
par ex ds le RS pour Moz sur le mousedown pour eviter la selection des images
car alors plus aucun focus n est pris sur les elt Html input par ex.
il faudrait limiter l usage aux images incrimin?es
*/

if (e.preventDefault) 
	e.preventDefault();
else 
	e.returnValue = false;

}

function propageEvent(e){
//======================
if (!e) var e = window.event;
if (!e.stopPropagation)
  e.cancelBubble = false;
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
}

function addHandler (oHtml,typeEvt,handler,oThis){
//===============================================
// (re)cr?ation de la m?thode associ?e ? l' evenement <typeEvt>
// pour l'objet Html <oHtml>
// comme l'enchainement des appels des diff?rents traitements ? appliquer
// dont le dernier <handler>
// avec ou sans passage de this en argument suivant la valeur de <oThis>

    // pas encore de gestionnaire de m?thodes
    if (!oHtml.tHandler)
          oHtml.tHandler = new Array();

    // pas de gestionnaire pour cet evenement
    if (!oHtml.tHandler[typeEvt])
          oHtml.tHandler[typeEvt] = new Array();

    // conservation des caract?ristiques de la nvlle fonction : nom + utilisation directe de this ou par oThis
    oHtml.tHandler[typeEvt][oHtml.tHandler[typeEvt].length] = {fct: handler,  oThis: oThis};

    // (re)construction du corps litt?ral de la focntion charg?e des appels cons?cutifs des m?thodes ad?quates
    var fct= '{';
    for (var i=0; i<  oHtml.tHandler[typeEvt].length; i++)
      if (oHtml.tHandler[typeEvt][i].oThis)
         fct +=   oHtml.tHandler[typeEvt][i].fct + '(e,this);';
      else
         fct +=   'this.' + oHtml.tHandler[typeEvt][i].fct + '(e);';
    fct += '}';
//         alert (oHtml.id +'->'+fct);

    // cr?ation et assignation de la fonction
    oHtml[typeEvt] = new Function('e',fct);
}

// function to revise :
DirDeplact = function(oHtml,e,height,width,margeSens,exclusionMarge,specOrientation)
//===============

// return cardinal cursor position as string (north, south, west, east ; ex: se, n ...)
//   if cursor must be in margins (exclusionMarge = false)
//   if cursor must be in center  (exclusionMarge = true)
{

var limOrientation = specOrientation || oHtml.dirRS ;  // a revoir
traceExec('dirdeplact margeSens= '+margeSens,75);
margeSens = margeSens || 0;

traceExec('limOrientation = '+limOrientation,76);
traceExec('DirDeplact -entree-',58);
traceExec('oHtml.id= '+oHtml.id,58);
traceExec(' -- test/zone sensible='+(exclusionMarge?'centre':'marge'),58);
traceExec(' -- larg. marge = '+margeSens,58);
traceExec(' -- height = '+height+' width= '+width+' limOrientation= '+limOrientation,58);
traceExec('oHtml.style.border= '+oHtml.style.border,58);
traceExec('oHtml.style.borderLeftWidth= '+oHtml.style.borderLeftWidth,58);
traceExec('oHtml.style.borderTopWidth= '+oHtml.style.borderTopWidth,58);
// ? revoir oHtml.currentStyle.borderLeftWidth peut avoir un string comme valeur symb ex: medium
//var xPRC = e.offsetX ? (e.offsetX + parseInt(oHtml.currentStyle.borderLeftWidth)) : e.layerX;
//var yPRC = e.offsetY ? (e.offsetY + parseInt(oHtml.currentStyle.borderTopWidth)) : e.layerY;

var dir="";

var xy = _rum.$eventTopLeftInDiv(e);
var xPRC = xy.left;
var yPRC = xy.top;

traceExec(' -- pos Rel Curs x='+xPRC+' y='+yPRC,75);
traceExec('margeSens = '+margeSens,75);
traceExec(' -- limites width:'+width+' height:'+height,75);

// test position  / centre; possible returns = '' (not in center), w(est), n(ordth), x (alldir)
// use for DD
if (exclusionMarge){
// cette fa?on de faire est n?cessaire lorque 2 comportement se superpose sur le mm obj avec des directionns diff?rentes
// pour 1 seul comportement DD h ou v le 1er test est inutile

	// cursor in margins
	if (    (margeSens != 0)                     // pour eviter le test problematique ds tableau Moz s'il n'y a pas de marge ? considerer
        && (
               (xPRC < margeSens)
            || (xPRC > (width - margeSens))
            || (yPRC < margeSens)
            || (yPRC > (height - margeSens)) )
        )
      dir = ''
      
    // cursor in center  
	else{
   		if (limOrientation == 'h')
    		dir = 'w';	//for west-east
   		else
   		if (limOrientation == 'v')
    		dir = 'n';	// for nord-south
   		else			
    		dir = 'x';	// for all directions
  	}
  	
/* ancien code signification et usage a revoir
   if (limOrientation != 'h')
    dir = (  (yPRC > margeSens) && (yPRC < (height - margeSens))) ? 'n' : '';
   if (limOrientation != 'v')
    dir += (  (xPRC > margeSens) && (xPRC < (width - margeSens))  ) ? 'w' : '';
  }
*/
}

// test position / marges; possible returns = n, s, w, e, nw, ne, sw, se
else {
  if ( limOrientation != 'h')
    if  (yPRC < margeSens)
        dir = "n";
    else if (yPRC > (height - margeSens))
        dir = "s";

  if (limOrientation != 'v')
    if  (xPRC < margeSens)
        dir += "w";
    else if (xPRC > (width - margeSens))
        dir += "e";

  traceExec('(width - margeSens) = '+(width - margeSens),58);
}
window.status = (exclusionMarge?'interne ':'marge ') +'height='+height+' width= '+width+' marge = '+margeSens+ " xPRC= " + xPRC + " yPRC= " + yPRC  + " dir= " + dir;
traceExec(' -- dir retourn?e= '+dir,58);
return dir;
}

